package es.ucm.is.www.GUI.client.units;

import java.util.ArrayList;

import com.google.gwt.core.client.GWT;
import com.google.gwt.user.client.rpc.ServiceDefTarget;
import com.google.gwt.user.client.ui.AbstractImagePrototype;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.ClickListener;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.DockPanel;
import com.google.gwt.user.client.ui.MouseListener;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.Widget;
import com.google.gwt.user.client.ui.Tree;
import com.google.gwt.user.client.ui.CaptionPanel;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.Grid;
import com.google.gwt.user.client.ui.Image;
import com.google.gwt.user.client.ui.TextArea;

import es.ucm.is.www.GUI.client.Constantes;
import es.ucm.is.www.GUI.client.Panel1;
import es.ucm.is.www.GUI.client.admin.PanelInfoPlayerUnits;
import es.ucm.is.www.GUI.client.city.CityGUI;
import es.ucm.is.www.GUI.client.city.CityService;
import es.ucm.is.www.GUI.client.city.CityServiceAsync;
import es.ucm.is.www.GUI.client.img.unitsMenu.ImagenesUnitsMenu;
import es.ucm.is.www.GUI.client.panels.ErrorPanel;
import es.ucm.is.www.GUI.client.panels.GenericPanel;
import es.ucm.is.www.GUI.client.panels.PanelWaiting;
import es.ucm.is.www.GUI.client.panels.PanelWaitingRight;
import es.ucm.is.www.GUI.client.resources.BarraRecursos;
import es.ucm.is.www.GUI.client.img.ImagenesMapa;
import es.ucm.is.www.GUI.client.units.PanelUnitsConstructed;
import es.ucm.is.www.GUI.client.img.ImagenesMapa;
/**
 * <p>Title: UnitSelectcity.java </p>
 *
 * <p>Description: Clase para gestionar las unidades de las ciudades</p>
 *
 * <p>Copyright: </p>
 *
 * @author 
 * @version 1.0
 * @see
 */
public class UnitSelectCity extends Composite {

	private VerticalPanel panelV;
	private ImagenesMapa imagenesMapa;
	private GenericPanel padre;
	private PanelWaiting wait;
	//private Image imagen;
	private Button cerrar;
	//private ArrayList<HorizontalPanel> ciudadesUser;
	private ArrayList<HTML> nombres;
	
	/**
	 * Constructora de la clase
	 * @param user: nombre de usuario
	 * @param cityName: nombre de la ciudad
	 * @param padre: panel que ha realizado la llamada a esta seccion
	 */
	public UnitSelectCity(String user, final String cityName, final GenericPanel padre){
		panelV = new VerticalPanel();
	
		imagenesMapa = GWT.create(ImagenesMapa.class );
		//imagen = new Image();
		this.padre = padre;
		cerrar = new Button("Cerrar");
		cerrar.addClickListener(new ClickListener(){

			public void onClick(Widget sender) {				
				padre.ocultar();
			}
			
		});
		CityServiceAsync servicio = (CityServiceAsync) GWT.create(CityService.class);
		ServiceDefTarget endpoint = (ServiceDefTarget) servicio;
		endpoint.setServiceEntryPoint(GWT.getModuleBaseURL() + "servletCities");
		AsyncCallback<ArrayList<CityGUI>> callback = new AsyncCallback<ArrayList<CityGUI>>(){
		
			public void onFailure(Throwable caught) {
				wait.ocultar();
				ErrorPanel err = new ErrorPanel("Error al conectar con el servidor...");
				err.show();
			}

			public void onSuccess(ArrayList<CityGUI> result) {
				
				if(result!=null){	
					if(result.size()==0){
						wait.ocultar();
						ErrorPanel err = new ErrorPanel("Error al conectar con el servidor...");
						err.show();
					}else{
						//importa ciudades
						creaArbolCiudades(result,cityName, imagenesMapa.ciudad1());
					}
				}else{
					wait.ocultar();
					ErrorPanel err = new ErrorPanel("Error al conectar con el servidor...");
					err.show();
				}

			}
			
		};
		servicio.getCities(Panel1._tuplaLogin.getState(), callback);
		wait = new PanelWaiting();
		wait.mostrar();
		
	}
	
	/**
	 * Metodo para crear el arbol de ciudades
	 * @param arr: ArrayList con todas las ciudades
	 * @param ciudadDestino: nombre d ela ciudad destino
	 * @param imagenAbstracta: imagen
	 */
	public void creaArbolCiudades(final ArrayList<CityGUI> arr,final String ciudadDestino, AbstractImagePrototype imagenAbstracta) {
		wait.ocultar();
		nombres = new ArrayList<HTML>();
		ArrayList<HorizontalPanel> ciudadesUser = new ArrayList<HorizontalPanel>();
		//grid = new Grid(arr.size(),2);
		//panelV=new DockPanel();
		//VerticalPanel v = new VerticalPanel();
		for(int j = 0;j<arr.size();j++){
			nombres.add(new HTML());
			nombres.get(j).setHTML(arr.get(j).getCityName());
			final int s = j;
			final HTML nombre = nombres.get(j);
			nombre.addMouseListener(new MouseListener(){

				public void onMouseDown(Widget sender, int x, int y) {
					//panelVaux.clear();
					padre.ocultar();
					Constantes.setRight(new UnitSelectBattalion(arr.get(s).getCityName(),ciudadDestino,Panel1._tuplaLogin.get_user()));
					
				}
				public void onMouseEnter(Widget sender) {
					nombre.addStyleName("cursorHand");
					nombre.addStyleName("rojo");
				}
				public void onMouseLeave(Widget sender) {
					nombre.removeStyleName("cursorHand");
					nombre.removeStyleName("rojo");
				}
				public void onMouseMove(Widget sender, int x, int y) {
				}
				public void onMouseUp(Widget sender, int x, int y) {
				}
		    });
		 
		   	Image imagen = new Image();
		
		    imagenAbstracta.applyTo(imagen);
			
			ciudadesUser.add(new HorizontalPanel());
		    //grid.setWidget(j, 0, imagen);
			ciudadesUser.get(j).add(imagen);
			ciudadesUser.get(j).add(nombre);
			//grid.setWidget(j, 1, nombre);
			panelV.add(ciudadesUser.get(j));
		}
		
		//panelV.add(v);
		panelV.add(cerrar);
		initWidget(panelV);
		padre.insertarWidget(this);
		//padre.setHeight("500px");
		
		padre.mostrar();
		padre.show();
		
	}
}
